Espresso হল Android এর একটি শক্তিশালী UI Testing ফ্রেমওয়ার্ক, যা অ্যাপ্লিকেশনের UI কম্পোনেন্টগুলোর সাথে ইন্টারঅ্যাক্ট করে এবং UI ইভেন্ট এবং প্রতিক্রিয়া সিমুলেট করতে সহায়ক। এটি UI কম্পোনেন্টগুলো যাচাই করে এবং UI এর পরিবর্তন সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করে। Espresso ব্যবহার করে UI টেস্টিং দ্রুত, নির্ভরযোগ্য এবং অ্যাসিঙ্ক্রোনাস কাজের ক্ষেত্রেও নির্ভুল হয়।
Espresso দিয়ে UI Testing
নিচে Espresso দিয়ে UI Testing এর ধাপে ধাপে বিশ্লেষণ এবং উদাহরণ দেওয়া হলো:
১. Espresso সেটআপ করা
Espresso ব্যবহার করার জন্য Gradle ফাইলে ডিপেনডেন্সি যোগ করতে হবে।
Gradle ডিপেনডেন্সি
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test:rules:1.4.0'
ডিপেনডেন্সি যোগ করার পর, আপনি Espresso টেস্ট লিখতে এবং অ্যাপ্লিকেশনকে এমুলেটর বা বাস্তব ডিভাইসে রান করাতে পারবেন।
২. Espresso এর মূল উপাদান
Espresso মূলত তিনটি ধাপে কাজ করে:
- View Interaction: কোন ভিউতে অ্যাকশনের জন্য ভিউ সিলেক্ট করা।
- Action Execution: সেই ভিউতে নির্দিষ্ট অ্যাকশন (যেমন ক্লিক, টাইপ) সম্পন্ন করা।
- View Assertions: ভিউয়ের উপর নির্দিষ্ট assertion করা, যা UI এর স্টেট যাচাই করে।
৩. Espresso টেস্ট উদাহরণ
নিচে একটি সাধারণ Espresso টেস্ট উদাহরণ দেওয়া হলো, যেখানে একটি বাটন ক্লিক এবং একটি টেক্সট ভিউ আপডেট চেক করা হয়েছে:
উদাহরণ: বাটন ক্লিক এবং টেক্সট ভিউ যাচাই করা
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
@Test
fun buttonClick_updatesTextView() {
// Activity চালু করুন
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
// বাটনে ক্লিক করুন
onView(withId(R.id.button)).perform(click())
// টেক্সট ভিউ যাচাই করুন
onView(withId(R.id.textView)).check(matches(withText("Button Clicked")))
}
}
ব্যাখ্যা:
- onView(withId(R.id.button)): এই লাইনটি UI কম্পোনেন্টকে সিলেক্ট করে, যেখানে বাটনের ID button।
- perform(click()): বাটনে ক্লিক অ্যাকশন সম্পন্ন করা।
- check(matches(withText("Button Clicked"))): টেক্সট ভিউয়ে টেক্সট সঠিকভাবে আপডেট হয়েছে কিনা তা যাচাই করা।
৪. Espresso এর বিভিন্ন অ্যাকশন এবং Assertion
Espresso বিভিন্ন ধরনের অ্যাকশন এবং assertion প্রদান করে, যা আপনি UI টেস্টের জন্য ব্যবহার করতে পারেন।
(ক) Common Actions:
- click(): ভিউতে ক্লিক করে।
- typeText("Text"): ইনপুট ফিল্ডে টেক্সট টাইপ করে।
- clearText(): ইনপুট ফিল্ডে থাকা টেক্সট মুছে ফেলে।
- scrollTo(): স্ক্রলেবল ভিউতে স্ক্রল করে।
উদাহরণ: ইনপুট ফিল্ডে টেক্সট টাইপ করা
onView(withId(R.id.editText)).perform(typeText("Hello"))
(খ) Common Assertions:
- matches(withText("Text")): ভিউতে টেক্সট মিলিয়ে যাচাই করে।
- isDisplayed(): ভিউ ডিসপ্লেতে আছে কিনা তা যাচাই করে।
- isChecked(): চেকবক্স বা টগল বাটনের চেক স্টেট যাচাই করে।
উদাহরণ: ভিউ ডিসপ্লেতে আছে কিনা যাচাই করা
onView(withId(R.id.textView)).check(matches(isDisplayed()))
৫. Espresso এর Espresso Idling Resource
Espresso সাধারণত অ্যাসিঙ্ক্রোনাস কাজগুলোর জন্য Idling Resource ব্যবহার করে, যা নিশ্চিত করে যে UI টেস্ট সঠিকভাবে অ্যাসিঙ্ক্রোনাস ইভেন্টগুলোর পরেও এক্সিকিউট হয়।
উদাহরণ: Idling Resource ব্যবহার করা
val idlingResource = CountingIdlingResource("Network_Call")
// শুরুতে ইনক্রিমেন্ট করুন
idlingResource.increment()
// নেটওয়ার্ক কল শেষ হলে ডিক্রিমেন্ট করুন
if (!idlingResource.isIdleNow) {
idlingResource.decrement()
}
// Espresso কে Idling Resource সম্পর্কে জানান
Espresso.registerIdlingResources(idlingResource)
Idling Resource ব্যবহার করে আপনি নেটওয়ার্ক কল বা ডেটাবেস অপারেশনের মতো অ্যাসিঙ্ক্রোনাস কাজ সম্পন্ন হলে UI টেস্ট চালাতে পারেন।
৬. Espresso Intents
Espresso Intents ব্যবহার করে আপনি অ্যাপ্লিকেশনের ইন্টেন্ট কার্যকলাপ যাচাই করতে পারেন। এটি নিশ্চিত করে যে নির্দিষ্ট ইন্টেন্ট ঠিকঠাক কাজ করছে এবং সঠিক ডেটা দিয়ে প্রেরণ করা হচ্ছে।
উদাহরণ: Intent যাচাই করা
@Test
fun testIntent() {
Intents.init()
// Button ক্লিক করুন যা Intent ট্রিগার করবে
onView(withId(R.id.buttonIntent)).perform(click())
// Intent যাচাই করুন
intended(hasComponent(TargetActivity::class.java.name))
Intents.release()
}
এখানে Intended ফাংশন ব্যবহার করে যাচাই করা হয়েছে যে Intent সঠিকভাবে TargetActivity তে শুরু হয়েছে কিনা।
৭. Espresso Data Matcher
Espresso Data Matcher ব্যবহার করে ListView বা RecyclerView এর মধ্যে থাকা ডেটা যাচাই করা যায়।
উদাহরণ: RecyclerView আইটেম যাচাই করা
@Test
fun testRecyclerViewItem() {
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(5))
onView(withText("Item 5"))
.check(matches(isDisplayed()))
}
এখানে RecyclerViewActions.scrollToPosition() ব্যবহার করে RecyclerView এর নির্দিষ্ট পজিশনে স্ক্রল করা হয়েছে এবং সেই পজিশনে থাকা আইটেম যাচাই করা হয়েছে।
৮. Espresso টেস্টিং Best Practices
- Write Isolated Tests: প্রত্যেক টেস্টকে স্বতন্ত্র এবং নির্ভরতা মুক্ত রাখুন।
- Use Idling Resources: অ্যাসিঙ্ক্রোনাস কাজগুলো নিশ্চিত করতে Idling Resources ব্যবহার করুন।
- Avoid Hard-Coded Delays: Thread.sleep() ব্যবহার না করে Espresso এর Idling Resource ব্যবহার করুন।
- Use Mock Data: টেস্টে নির্দিষ্ট ফাংশনালিটির পরীক্ষা করতে মক ডেটা ব্যবহার করুন।
উপসংহার
Espresso হল Android এর একটি শক্তিশালী UI Testing ফ্রেমওয়ার্ক, যা UI ইন্টারঅ্যাকশন এবং UI পরিবর্তনের জন্য নির্ভরযোগ্য এবং দ্রুত টেস্টিং সল্যুশন প্রদান করে। Espresso এর বিভিন্ন অ্যাকশন এবং assertion ব্যবহার করে, আপনি আপনার অ্যাপ্লিকেশনের UI ফাংশনালিটি এবং ব্যবহারকারীর ইন্টারঅ্যাকশন যাচাই করতে পারবেন। Idling Resources এবং Intents ব্যবহারের মাধ্যমে অ্যাসিঙ্ক্রোনাস অপারেশন এবং Intent সম্পর্কিত কার্যক্রম পরীক্ষা করা সহজ হয়। Proper UI Testing নিশ্চিত করে, আপনি একটি নির্ভুল এবং রেসপন্সিভ অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Read more